"""
高阶函数:把函数作为参数传入
高阶函数是函数式编程的体现
"""

def sum1(a,b,fn):
    return fn(a)+fn(b)

result=sum1(-1,2,abs)
print(result)


"""
1）计算list1序列中各个数字的2次方
   list1=[1,2,3,4,5]
2）计算list2序列中各个数字的累加和
   list2=[1,2,3,4,5]
3）过滤掉list3中的奇数，使其元素均为偶数
   list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
"""
# (1)
#内置函数
list1=[1,2,3,4,5]
# li1=[i**2 for i in list1]
# print(li1)

#高阶函数
lis2=map(lambda a:a**2,list1)
print(list(lis2))

#偶数变成原来的两倍，奇数不变
# result2=map(lambda a:a*a if a%2==0 else a,list1)
# print(list(result2))
# li2=[i**2 if i%2==0 else i for i in list1]
# print(li2)


#(2)
from functools import reduce
list2=[1,2,3,4,5]
result3=reduce(lambda a,b:a+b,list2)
print(result3)


#(3)

list3=[1,2,3,4,5,6,7,8,9,10]
result4=filter(lambda a:a if a%2==0 else '',list3)
print(list(result4))




